﻿
using log4net;
using NEGOCIOS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class RedactarCorreo : System.Web.UI.Page
{
    ILog logger = LogManager.GetLogger(typeof(RedactarCorreo));

    protected void Page_Load(object sender, EventArgs e)
    {
        logger.Info("Se inicio la pantalla Redactar Correo");
    }
    protected void btn_Inicio_Click(object sender, EventArgs e)
    {
        Response.Redirect("Home.aspx");
        logger.Info("Se Redirijo a la pantalla de Inicio");

    }
    protected void btn_VerCorreo_Click(object sender, EventArgs e)
    {
        Response.Redirect("VerCorreos.aspx");
        logger.Info("Se Redirijo a la pantalla Ver Correo");
    }
    protected void btn_Enviar_Click(object sender, EventArgs e)
    {
        string[] para = null;
        bool isvalido=false;
        try { 
            para=txb_Para.Text.Split(';');
            isvalido = verificarSiLosCorreosSonValidos(para);
            logger.Info("El correo es valido");
        }
        catch(Exception ex){
            lbleviado.Text = "Correos en formato incorrecto";
            logger.Debug("Correo en formato incorrecto: "+ lbleviado);
            logger.Error("Esta es la excepcion: " + ex);
        }
        if (para != null && isvalido)
        {
            string asunto = txb_Asunto.Text;
            string mensaje = txb_Mensaje.Text;
            string de = (string)this.Session["usuario"];
            enviarCorreos(de,para,asunto,mensaje);
            txb_Para.Text="";
            txb_Asunto.Text = "";
            txb_Mensaje.Text = "";
            lbleviado.Text = "Mensaje enviado";
            logger.Info("Se envio el mensaje");
            return;
        }
        lbleviado.Text = "Correos en formato incorrecto";
        return;
        
        
    }
    private void enviarCorreos(string de, string[] para, string asunto, string mensaje)
    {
        List<Message> mensajes = new List<Message>();
       CuerpoMessage cuerpo = new CuerpoMessage(asunto, mensaje);
       for (int i = 0; i < para.Length; i++)
       {
        CabeceraMessage cabecera = new CabeceraMessage(de, para[i]);
        Message mensajeCompleto = new Message(cuerpo, cabecera, false);
        mensajes.Add(mensajeCompleto);
        logger.Info("Mensaje Completo");
       }
       MailCliet.sendMessage(mensajes);
       logger.Info("Se enviaron los mensajes");
    }
    private bool verificarSiLosCorreosSonValidos(string[] para)
    {
       for (int i = 0; i < para.Length; i++)
       {
           if (!email_bien_escrito(para[i])) 
           {
               logger.Info("Correo No Validos");
               return false; 
           }
       }
       logger.Info("Correo Validos");
        return true;
    }
    private Boolean email_bien_escrito(String email)
    {
        String expresion;
        expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
        if (Regex.IsMatch(email, expresion))
        {
            if (Regex.Replace(email, expresion, String.Empty).Length == 0)
            {
                logger.Info("Email Correcto");
                return true;
            }
            else
            {
                logger.Info("Email Incorrecto");
                logger.Debug("Caracter no Valido: "+expresion);
                return false;
            }
        }
        return false;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Session["usuario"] = null;
        Response.Redirect("Login.aspx");
        logger.Info("Cerro Sesion el Usuario");

    }
}